home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / easyrexx.lha / EasyREXX / Source / test.c next >
Encoding:
C/C++ Source or Header  |  1994-11-30  |  2.7 KB  |  124 lines

  1. /*
  2.  *    File:                    test.c
  3.  *    Description:    Small program to show how easy EasyRexx.library makes
  4.  *                                the AREXX handling.  Show how to handle AREXX messages
  5.  *                                checking the ID in the commandTable.
  6.  *
  7.  *    (C) 1994, Ketil Hunn
  8.  *
  9.  *    Set tab to 2 for best readability
  10.  *
  11.  */
  12.  
  13. #include <stdio.h>
  14.  
  15. #include <libraries/easyrexx.h>
  16. struct Library *EasyRexxBase;
  17.  
  18. #define    AREXX_CLEAR            1
  19. #define    AREXX_OPEN            2
  20. #define    AREXX_SAVEAS        3
  21. #define    AREXX_HELP            4
  22. #define    AREXX_TEXT            5
  23. #define    AREXX_ROW                6
  24. #define    AREXX_QUIT            7
  25.  
  26. /* This application supports these AREXX commands */
  27. struct ARexxCommandTable commandTable[]=
  28. {
  29. /*    ID          CMD       ARGUMENT TEMPLATE             USERDATA  */
  30.  
  31.     AREXX_CLEAR,    "CLEAR",        "FORCE/S",                                        NULL,
  32.     AREXX_OPEN,        "OPEN",            "PROJECT/S,TEXT/S,NAME/F",        NULL,
  33.     AREXX_SAVEAS,    "SAVEAS",        "NAME/K",                                            NULL,
  34.     AREXX_HELP,        "HELP",            "AMIGAGUIDE/S,TOPIC/F",                NULL,
  35.     AREXX_TEXT,        "TEXT",            "TEXT/A/F",                                        NULL,
  36.     AREXX_ROW,        "ROW",            "ROWNUMBER/A/N",                            NULL,
  37.     AREXX_QUIT,        "QUIT",            NULL,                                                    NULL,
  38.     TABLE_END,
  39. };
  40.  
  41.  
  42. BYTE myHandleARexx(struct ARexxContext *c)
  43. {
  44.     LONG result=RC_OK;
  45.     BYTE done=FALSE;
  46.  
  47.     if(GetARexxMsg(c))
  48.     {
  49.         printf("Received: ");
  50.         switch(c->id)
  51.         {
  52.             case AREXX_CLEAR:
  53.                 printf("CLEAR");
  54.                 break;
  55.             case AREXX_OPEN:
  56.                 printf("OPEN");
  57.                 if(ARG(c, 1))
  58.                     printf(" TEXT");
  59.                 else
  60.                     printf(" PROJECT");
  61.                 if(ARG(c, 2))
  62.                     printf(" '%s'", ARGSTRING(c,2));
  63.                 break;
  64.             case AREXX_SAVEAS:
  65.                 printf("SAVEAS '%s'", ARGSTRING(c,0));
  66.                 break;
  67.             case AREXX_HELP:
  68.                 printf("HELP");
  69.                 if(ARG(c, 0))
  70.                     printf(" AMIGAGUIDE");
  71.                 if(ARG(c, 1))
  72.                     printf(" '%s'", ARGSTRING(c,1));
  73.                 break;
  74.             case AREXX_TEXT:
  75.                 printf("TEXT '%s'", ARGSTRING(c,0));
  76.                 break;
  77.             case AREXX_ROW:
  78.                 printf("ROW %ld", ARGNUMBER(c,0));
  79.                 break;
  80.             case AREXX_QUIT:
  81.                 printf("QUIT");
  82.                 done=TRUE;
  83.                 break;
  84.         }
  85.         printf("\n");
  86.  
  87.         ReplyARexxMsg(c,
  88.                                     ER_ReturnCode, result,
  89.                                     TAG_DONE);
  90.     }
  91.     return done;
  92. }
  93.  
  94. void main(int argc, char **argv)
  95. {
  96.     if(EasyRexxBase=OpenLibrary(EASYREXXNAME, EASYREXXVERSION))
  97.     {
  98.         struct ARexxContext    *context;
  99.  
  100.         if(context=AllocARexxContext(    ER_Portname,            "EASYREXX_TEST",
  101.                                                                     ER_CommandTable,    commandTable,
  102.                                                                     TAG_DONE))
  103.         {
  104.             ULONG signal;
  105.             BYTE done=FALSE;
  106.  
  107.             printf(    "Welcome to a small EasyRexx demonstration\n"
  108.                             "-----------------------------------------\n"
  109.                             "Open another shell and start the small\n"
  110.                             "AREXX script: rx test\n"
  111.                             "or doubleclick on the test.rexx icon.\n");
  112.             while(!done)
  113.             {
  114.                 signal=Wait(ER_SIGNAL(context));
  115.  
  116.                 if(signal & ER_SIGNAL(context))
  117.                     done=myHandleARexx(context);
  118.             }
  119.             FreeARexxContext(context);
  120.         }
  121.         CloseLibrary(EasyRexxBase);
  122.     }
  123. }
  124.